今天想要來跟大家介紹這次的套件主要功能,跟我預計之後會如何拆解功能變成不同 Function 的構想。最一開始會再更詳細介紹 Statcast Search 這個在大聯盟官方的數據網站 Baseball Savant 上的功能。去年參加鐵人賽的時候我就要寫一篇文章簡單介紹過了,大家有興趣可以去看看,今天會直接進入更詳細的介紹。
為什麼要再介紹一次 Savant 的搜尋頁呢?的確 pybaseball 已經提供了一些可以操作 Statcast Search 的 function 給大家使用,不過他只提供的篩選只有 date
而已。而其實搜尋頁提供很多可以使用的篩選,只有日期的篩選的話我覺得略顯可惜。
可以從上圖看到除了日期,還有將近 30-40 左右的篩選可以使用。
另外一個是我沒有在去年的文提到的新功能,因為是今年 3 月左右,大聯名例行賽開季前釋出的 Minor League Statcast Search ,也就是小聯盟的 Statcast 搜尋。雖然目前不是所有小聯盟的比賽都在這邊搜尋的到(目前含有:從 2023 年開始的所有 3A 資料,2022 年開始的 PCL 跟 夏洛特主場賽事,以及 2021 年開始的 1A 佛羅里達州聯盟),但現在已經可以搜尋到許多在小聯盟打拼的台灣好手,像是目前效力於紅雀 1A 的 林振偉 選手的資料,因為是在佛羅里達聯盟,所以收得特別多。
所以希望在這次鐵人賽能完成兩大功能:
基本上兩個性質滿重疊的,使用的 參數(Parameters) 也大同小異,不過可以使用篩選值,像是球場或是球隊可能就會不太一樣。
在開始寫程式前,想介紹一下他們是如何使用 URL
來使用篩選器,當我們在搜尋頁搜尋一個目標後,大家可以注意一下網址的變化,像是剛才林振偉的搜尋結果,會得到
https://baseballsavant.mlb.com/statcast-search-minors?hfPT=&hfAB=&hfGT=R%7C&hfPR=&hfZ=&hfStadium=&hfBBL=&hfNewZones=&hfPull=&hfC=&hfSea=2024%7C&hfSit=&player_type=pitcher&hfOuts=&hfOpponent=&pitcher_throws=&batter_stands=&hfSA=&game_date_gt=&game_date_lt=&hfMo=&hfTeam=&home_road=&hfRO=&position=&hfInn=&hfBBT=&hfFlag=is%5C.%5C.tracked%7C&hfLevel=&pitchers_lookup%5B%5D=813820&metric_1=&hfTeamAffiliate=&hfOpponentAffiliate=&group_by=name&min_pitches=0&min_results=0&min_pas=0&sort_col=pitches&player_event_sort=api_p_release_speed&sort_order=desc&chk_is..tracked=on#results
很大一長串,他會以 ?
為起點,然後再用每個 &
為斷點,就能拿到每一個 Filter
的 key
跟 value
,最後回拿到一個 parameters
的 dictionary
,之後就可以使用裡面 參數,像是 player_type=pitcher
就會變成
{
"player_type": "pitcher"
}
如果是空值,等號後面就不會有東西,之後就可以操作 URL 來進行篩選。不過也可以看到,這樣參數會很多,所以我會想拆成不同功能的 functions,但還是會留一個最有彈性的 function 供大家選擇使用。
預計會是這樣:
statcast_search
statcast_pitcher
、statcast_batter
、statcast_catcher
statcast_team_pitcher
、statcast_team_batter
、statcast_team_catcher
minor_statcast_search
做分別今天介紹了一下之後開發的計畫,明天想來介紹這些 parameters
,跟他們可能會有的值,我們也許會需要特別設計 ENUM
去存。
一樣感謝大家耐心地看完這篇文章,有任何問題與建議歡迎留言告訴我,明天見,掰掰。